% 2-10 páginas

%   (Limitações)
%   (Lições aprendidas)
% Recapitulação
% Resumo das contribuições
% Trabalhos futuros

\chapter{Conclusão} \label{cap:conclusao}

Neste trabalho foram apresentados modelos de redes que podem ser interpretadas como dependências entre entidades de código-fonte com a finalidade de apoiar a abordagem de simulação na avaliação de ferramentas de engenharia reversa. Mostrou-se que três dos modelos são capazes de gerar redes que se assemelham a redes de dependências estáticas entre classes em programas orientados a objetos. A partir deste resultado, foi feito um estudo sobre algoritmos de agrupamento de software, como prova de conceito, usando um dos modelos.

% Neste trabalho foi apresentada uma nova abordagem para avaliação de algoritmos de agrupamento de software, baseada na simulação de modelos de redes organizadas em módulos. 

Este trabalho não diminui a importância de se avaliar ferramentas de engenharia reversa a partir da análise por especialistas de dependências extraídas de sistemas de software reais. Ainda assim, o uso de redes de software sintéticas de forma complementar pode ser vantajoso no estudo dos algoritmos. Primeiramente, o uso de modelos permite a criação de conjuntos de teste extensos. Além disso, as redes são criadas de maneira controlada, de acordo com parâmetros pré-definidos, o que torna possível estudar o comportamento dos algoritmos com diversos valores de parâmetros.

% O uso de conjuntos de dados sintéticos, produzidos por modelos, é comum na pesquisa de sistemas distribuídos e redes, mas ainda pouco explorado na pesquisa de engenharia de software. O impacto deste trabalho pode ir além da comunidade de agrupamento de software, uma vez que muitas tarefas de engenharia reversa usam dependências entre entidades de software para extrair informações sobre sistemas.

As contribuições desta pesquisa para o estado da arte podem ser assim resumidas:

\begin{itemize}
	% \item identificação de dois modelos de redes organizadas em módulos, CGW e LFR;
	\item desenvolvimento de um modelo de redes organizadas em módulos, o BCR+;
	\item desenvolvimento e avaliação de um modelo de classificação que identifica redes que se assemelham a redes de dependências extraídas de sistemas de software;
	\item fornecimento de evidências empíricas de que os modelos de redes BCR+, CGW e LFR são capazes de gerar redes software-realistas;
	% \item identificação de valores para os parâmetros dos três modelos que induzem a geração de redes software-realistas;
	\item prova de conceito da viabilidade do uso dos modelos de redes para avaliar ferramentas de engenharia reversa, em particular, algoritmos de agrupamento aplicados no contexto de recuperação de arquiteturas de software. 
	% \item comparação do desempenho de quatro algoritmos de agrupamento de software: ACDC, Bunch, SL e CL;
	% \item entendimento da influência do número de módulos de uma rede no desempenho dos algoritmos de agrupamento; em particular, a constatação de que os algoritmos aglomerativos (SL e CL) têm o desempenho consideravelmente degradado com o aumento do número de módulos, o que não é perceptível nos outros dois algoritmos.
\end{itemize}

As três primeiras contribuições desta pesquisa foram documentadas de forma preliminar no artigo ``Modular Network Models for Class Dependencies in Software'', apresentado na 14ª Conferência Europeia sobre Manutenção de Software e Reengenharia (CSMR 2010). 
% Há planos de escrever um outro artigo com os resultados completos da pesquisa.

%%% LIMITAÇÕES

Naturalmente, este trabalho possui algumas limitações que poderão ser endereçadas em trabalhos futuros. A representação usada para sistemas de software --- grafo orientado --- é bastante simples e abstrai aspectos de sistemas de software que podem ser importantes, como a diferenciação de tipos de entidades (classes, atributos, métodos, arquivos fonte etc.). Além disso, o grafo orientado não diferencia diversos tipos de relacionamento entre entidades, como chamada de método, leitura de atributo etc. Em vez disso, todos os relacionamentos são abstraídos sob a forma do relacionamento de dependência.

% TRABALHOS FUTUROS

Uma possibilidade interessante do modelo BCR+, que não foi explorada nesta pesquisa, é a geração de redes organizadas hierarquicamente em vários níveis. Por exemplo, seria possível gerar uma rede para representar um sistema de software em três níveis hierárquicos: métodos, classes e módulos (métodos agrupados em classes, classes agrupadas em módulos). Para isso bastaria executar o modelo diversas vezes, de modo que cada execução usasse como parâmetro $G$ (grafo de dependências entre módulos) a rede produzida na execução anterior.


% O foco deste trabalho foi o agrupamento de entidades de software em módulos de forma a minimizar dependências entre módulos. Existem, no entanto, outros critérios para agrupar entidades de software. Por exemplo, algumas pesquisas se preocupam em estudar o agrupamento de entidades que implementam funcionalidades relacionadas. Os modelos estudados neste trabalho não incorporam o conceito de funcionalidade e, portanto, não são adequados para se estudar agrupamentos de entidades de software sob o ponto de vista funcional.

% Limitações
% 
% Trabalhos futuros
%   Refinar modelos, com informações hierárquicas, tipos de vértices, múltiplas arestas com tipos e peso...
%   Refinar modelos, adicionando a dimensão da evolução
%   Pesquisar outros problemas, além de clustering de software, que possam se beneficiar de modelos baseados nos modelos aqui apresentados.